package com.xzcedu.reflection.class_;

import com.xzcedu.Cat;

/**
 * @author 徐州城
 * @version 1.0
 * 对Class类特点的梳理
 */
public class Class01 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {

        //1. Class也是类，因此也继承了Object类
        //Class
        //2. Class类对象不是new出来的，而是系统创建的
        //(1) 传统new对象
        /*
            public Class<?> loadClass(String name) throws ClassNotFoundException {
                return loadClass(name, false);
            }
         */
        //Cat cat = new Cat();
        //(2) 反射的方式，刚才没有debug到 ClassLoader类的 loadClass，原因是，没有注销Cat cat = new Cat();(因为：类只会加载一次)
        /*
            ClassLoader类，仍然是通过 ClassLoader 类加载Cat类的 Class对象
            public Class<?> loadClass(String name) throws ClassNotFoundException {
                return loadClass(name, false);
            }
         */
        Class<?> cls1 = Class.forName("com.xzcedu.Cat");

        //3. 对于某个类的Class对象，在内存中只有一份，因为类只加载一次
        Class<?> cls2 = Class.forName("com.xzcedu.Cat");
        System.out.println(cls1.hashCode());
        System.out.println(cls2.hashCode());
    }
}
